#include <iostream>
using namespace std;
#include <list>
const int arrsize = 8;
// int sum_arr(int arr[], int sz) {
//   int sum = 0;
//   for (int i = 0; i < sz; i++) {
//     sum += arr[i];
//   }
//   return sum;
// }

int sum_arr(int *begin, int *end) {
  const int *ptr;
  int sum = 0;
  for (ptr = begin; ptr != end; ptr++) {
    sum += *ptr;
  }
  return sum;
}
int m1() {
  int cookies[arrsize] = {1, 2, 4, 8, 16, 32, 64, 128};
  // int sum = sum_arr(cookies, 3);
  int sum = sum_arr(cookies, cookies + arrsize);
  cout << cookies << "is a address" << endl;
  cout << "数组的大小为" << sizeof(cookies) << endl;
  cout << "总共吃的甜饼数量为" << sum << endl;

  return 0;
}

// const和指针
int m2() {
  int age = 39;
  const int *p =
      &age; //这里的p指向const
            //int（也就是39）因此不能使用*p来修改这个值，但是可以直接修改age来完成修改

  //二级指针的情况
  int ret = 39;
  int *p1 = &ret;
  const int *p2 = p1;

  const int **pp2;
  int *pt1;
  const int n = 13;
  // pp2 = &p1;//这是未定义行为
  *pp2 = &n;
  *p1 = 10;

  return 0;
}

int m3() {
  int age = 30;
  const int *p1 = &age;
  //*p1 = 33;//这里是不允许的，因为const在最前面，表示不能修改*p1的值
  //但是可以修改地址
  int age2 = 80;
  p1 = &age2; //这样就完成了修改，但是同样不能修改80

  //第二种情况
  int *const p2 =
      &age; // const在中间，表示p2只能指向age，也就是说不能让p2再指向其他的地址
  // p2 = &age2;//这就是一个例子
  //但是可以对p2进行解引用
  *p2 = 100; //这样就完成了修改age的值
  cout << *p2 << endl;

  return 0;
}




//函数和二维数组
int main(){
    int data[3][4] = {{1,2,3,4},{2,3,4,5},{3,4,5,6}};
    










    return 0;
}
